package com.team.auth.service;

import com.team.auth.utils.SendSmsUtil;
import com.team.common.core.constant.CacheConstants;
import com.team.common.redis.service.RedisService;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.concurrent.TimeUnit;

@Service
public class SysSmsService {
    @Resource
    private RedisService redisService;

    public boolean validateCode(String phone, String code) {
        // 这里可以添加短信验证码验证的逻辑
        // 例如：从数据库或缓存中获取存储的验证码进行比对
        String cachedCode = redisService.getCacheObject(CacheConstants.SMS_CODE_KEY + phone);
        if (cachedCode == null) {
            // 如果缓存中没有验证码，说明验证码已过期或不存在
            return false;
        }
        // 比较传入的验证码和缓存中的验证码
        if (!cachedCode.equals(code)) {
            // 如果验证码不匹配，返回 false
            return false;
        }
        // 可以删除缓存中的验证码，防止重复使用
        redisService.deleteObject(CacheConstants.SMS_CODE_KEY + phone);
        // 如果验证成功，返回 true；否则返回 false
        return true; // 假设验证成功
    }

    public void sendSms(String phone) {
        // 检查手机号一分钟内是否已发送过验证码
        Boolean isSent = redisService.getCacheObject(CacheConstants.SMS_SEND_LIMIT_KEY + phone);
        if (isSent != null && isSent) {
            // 如果缓存中存在发送限制，说明一分钟内已发送过验证码
            throw new RuntimeException("一分钟内只能发送一次验证码");
        }
        // 发送成功后，可以将验证码存储在数据库或缓存中以供验证使用
        // String code = generateCode(); // 生成验证码

        String code = "123456"; // 这里使用固定验证码，实际应用中应生成随机验证码

        String[] phoneNumberSet = {phone}; // 将手机号放入数组中
        // 调用发送短信的工具类

        //SendSmsUtil.sendSms(phoneNumberSet, code);


        // 这里可以将验证码存储到缓存中，供后续验证使用
        redisService.setCacheObject(CacheConstants.SMS_CODE_KEY + phone, code, 5L, TimeUnit.MINUTES);
        // 限制每个手机号在1分钟内只能发送一次验证码
        redisService.setCacheObject(CacheConstants.SMS_SEND_LIMIT_KEY + phone, true, 1L, TimeUnit.MINUTES);

    }
    // 生成6位随机验证码
    public String generateCode() {
        // 生成6位随机验证码
        int code = (int) (Math.random() * 900000) + 100000; // 生成100000到999999之间的随机数
        return String.valueOf(code);
    }
}
